home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 41 / Amiga Format CD41 (1999-06)(Future Publishing)(GB)[!][issue 1999-07].iso / -seriously_amiga- / cd-rom / acdb / src / acdb.e < prev    next >
Text File  |  1999-04-28  |  12KB  |  457 lines

  1. OPT OSVERSION=37,LARGE
  2. OPT PREPROCESS,REG=5
  3.  
  4.  
  5. /*
  6.  *-- AutoRev header do NOT edit!!
  7.  *
  8.  *   Project         :   AMIGA CD BASE - program obsîugujâcy CDDB
  9.  *   File            :   acdb.e
  10.  *   Description     :   gîówna pëtla obsîugujâca GUI
  11.  *   Copyright       :   ©1999, Piotr Gapiïski
  12.  *   Author          :   Piotr Gapiïski
  13.  *   Creation Date   :   25.03.99
  14.  *   Current version :   1.0 BETA
  15.  *   Translator      :   AmigaE v3.3a
  16.  *
  17.  *-- REVISION HISTORY
  18.  *
  19.  *   1.0 (25.03.99)
  20.  *    o   nowy moduî iconify_plugin reagujâcy takûe na CTRL-F
  21.  *    o   port arexx'a
  22.  *    o   wprowadzone wagi bîëdów (niektóre majâ koïczyê program a niektóre tylko ostrzegaê)
  23.  *    o   nowe tooltype DISKS, TEMP, CDTIME, TRACKTIME
  24.  *    o   sprawdzanie czy zapisywany (write_id) cdid pîyty juû istnije w DISKS
  25.  *    o   niektóre bîëdy wpîywajâ bezpoôrednio na nazwy plików w TEMP
  26.  *
  27.  *
  28.  *-- TODO
  29.  *    o   podczas ikonifikacji programu nie dziaîa port Arexx'a
  30.  *    o   poprawiê úródîówkë
  31.  *
  32.  *-- REV_END --*
  33.  */
  34.  
  35.  
  36. MODULE 'tools/EasyGUI','easygui/plugins/iconify'
  37. MODULE 'intuition/intuition','intuition/screens',
  38.        'workbench/workbench','workbench/startup',
  39.        'exec/nodes','exec/lists','dos/dos','dos/dosextens','dos/exall','utility/tagitem',
  40.        'libraries/reqtools','reqtools','libraries/gadtools','utility','icon',
  41.        'libraries/easyrexx','libraries/easyrexx_macros','easyrexx', 'amigalib/lists',
  42.        'amigalib/argarray','utility','tools/inithook','utility/hooks','easygui/plugins/simplegauge'
  43. MODULE '*acdb_debug','*acdb_gui','*acdb_arexx','*acdb_cd','*acdb_files','*acdb_net','*libs'
  44.  
  45.  
  46.   #ifdef DEBUG
  47.     MODULE 'tools/debug'
  48.     #define D(a,b) kputfmt(a,b)
  49.   #endif
  50.   #ifndef DEBUG
  51.     #define D(a,b)
  52.   #endif
  53.  
  54.   #define PROGRAM       'ACDB'
  55.   #define DESCRIPTION   'CDDB protocol client for Amiga'
  56.   #define VERSION       '$VER: acdb 1.1 (19.04.99) BETA'
  57.   #define WARE          'freeware'
  58.   #define COPYRIGHT     '©1999, Piotr Gapinski'
  59.  
  60.   #define DEF_DEVICE    'cd.device'
  61.   #define DEF_UNIT       0
  62.   #define DEF_CDDBPORT   80
  63.   #define DEF_CDDBHOST  'www.cddb.com'
  64.   #define DEF_ICONFILE  'PROGDIR:acdb'
  65.   #define DEF_TEMPPATH  'PROGDIR:temp'
  66.   #define DEF_DISKSPATH 'PROGDIR:disks'
  67.   #define DEF_PUBSCREEN 'Workbench'
  68.   #define DEF_CDTIME    'no'
  69.   #define DEF_TRACKTIME 'no'
  70.   #define DEF_CLEANTEMP 'yes'
  71.   #define ICONIFY        PLUGIN
  72.  
  73.   ENUM AREXX_QUIT=1,AREXX_DOWNLOAD,AREXX_CDID,AREXX_TRAY
  74.   DEF prg_name:PTR TO CHAR, prg_vers:PTR TO CHAR, prg_copy:PTR TO CHAR
  75.   DEF prg_ware:PTR TO CHAR, prg_desc:PTR TO CHAR
  76.  
  77.   DEF tt_device[255]:STRING, tt_unit
  78.   DEF tt_cddbhost[255]:STRING, tt_cddbport
  79.   DEF tt_iconfile[255]:STRING, tt_disks[255]:STRING, tt_pubname[100]:STRING
  80.   DEF tt_temp[255]:STRING
  81.   DEF tt_cdtime, tt_tracktime, tt_delete
  82.  
  83.   DEF gad_writeid, gad_abort, gad_progress:PTR TO simplegauge_plugin, gad_download
  84.  
  85.  
  86.  
  87. PROC main() HANDLE
  88.   DEF wbm:PTR TO wbstartup, ps:PTR TO process
  89.   DEF libs, tt:PTR TO LONG
  90.   DEF ig=NIL:PTR TO iconify, cnt, sigs, rc = RETURN_OK, err
  91.   DEF setup_cd=FALSE, setup_arx=FALSE, setup_gui=FALSE
  92.  
  93.   prg_name := PROGRAM
  94.   prg_desc := DESCRIPTION
  95.   prg_vers := VERSION
  96.   prg_copy := COPYRIGHT
  97.   prg_ware := WARE
  98.  
  99.   libs:=[
  100.           ['utility.library',   37, {utilitybase},  TRUE],
  101.           ['reqtools.library',  38, {reqtoolsbase}, TRUE],
  102.           ['icon.library',      36, {iconbase},     TRUE],
  103.           ['easyrexx.library',  03, {easyrexxbase}, FALSE]
  104.  
  105.         ]
  106.   IF openLibs(libs)=FALSE THEN Raise()
  107.  
  108.   IF (wbm := wbmessage)
  109.  
  110.     ->-
  111.     ->- ustaw katalog procesu jeûeli program zostaî
  112.     ->- uruchomiony z poziomu WB
  113.     ->- ustaw nazwë ikonki na takâ samâ jak nazwa programu
  114.     ->-
  115.  
  116.     ps  := FindTask(NIL)
  117.     ps.currentdir := wbm.arglist.lock
  118.     NameFromLock(ps.currentdir, tt_iconfile, 208)
  119.     AddPart(tt_iconfile, wbm.arglist.name, 208)
  120.   ELSE
  121.  
  122.     ->-
  123.     ->- ustaw domyôlnâ nazwë ikonki
  124.     ->-
  125.  
  126.     StrCopy(tt_iconfile, DEF_ICONFILE)
  127.   ENDIF
  128.  
  129.   tt := argArrayInit()
  130.  
  131.     ->-
  132.     ->- odczytaj parametry przekazywane przez TOOLTYPE
  133.     ->-
  134.  
  135.     StrCopy(tt_device, argString(tt, 'DEVICE', DEF_DEVICE))                 ->- sterownik cd
  136.     tt_unit := argInt(tt, 'UNIT', DEF_UNIT)                                 ->- unit
  137.     tt_cddbport := argInt(tt, 'PORT', DEF_CDDBPORT)                         ->- port serwera
  138.     StrCopy(tt_cddbhost, argString(tt, 'HOST', DEF_CDDBHOST))               ->- serwer cddb
  139.     StrCopy(tt_iconfile, argString(tt, 'ICON', tt_iconfile))                ->- ikonka
  140.     StrCopy(tt_temp, argString(tt, 'TEMP', DEF_TEMPPATH))                   ->- katalog tymczasowy
  141.     StrCopy(tt_disks, argString(tt, 'DISKS', DEF_DISKSPATH))                ->- katalog plików CDID
  142.     StrCopy(tt_pubname, argString(tt, 'PUBSCREEN', DEF_PUBSCREEN))          ->- ekran publiczny
  143.     tt_cdtime := MatchToolValue(argString(tt, 'CDTIME', DEF_CDTIME), 'yes') ->- umieszczanie caîkowitego czasu pîyty
  144.     tt_tracktime := MatchToolValue(argString(tt, 'TRACKTIME',DEF_TRACKTIME), 'yes')
  145.     tt_delete := MatchToolValue(argString(tt, 'CLEANTEMP',DEF_CLEANTEMP), 'yes')
  146.  
  147.     D('[MAIN] tt_device \s\n', [tt_device, NIL])
  148.     D('[MAIN] tt_unit \d\n', [tt_unit, NIL])
  149.     D('[MAIN] tt_cddbhost \s\n', [tt_cddbhost, NIL])
  150.     D('[MAIN] tt_cddbport \d\n', [tt_cddbport, NIL])
  151.     D('[MAIN] tt_iconfile \s\n', [tt_iconfile, NIL])
  152.     D('[MAIN] tt_temp \s\n', [tt_temp, NIL])
  153.     D('[MAIN] tt_disks \s\n', [tt_disks, NIL])
  154.     D('[MAIN] tt_pubscreen \s\n', [tt_pubname, NIL])
  155.     D('[MAIN] tt_cdtime \s\n', [IF (tt_cdtime) THEN 'YES' ELSE 'NO', NIL])
  156.     D('[MAIN] tt_tracktime \s\n', [IF (tt_tracktime) THEN 'YES' ELSE 'NO', NIL])
  157.     D('[MAIN] tt_cleantemp \s\n', [IF (tt_delete) THEN 'YES' ELSE 'NO', NIL])
  158.   argArrayDone()
  159.  
  160.   setup_arx := arxSetup(
  161.  
  162.     ->-
  163.     ->- port arexx'a jest opcjonalny wiëc nie potrzeba sprawdzaê czy udaîo sië go
  164.     ->- otworzyê
  165.     ->-
  166.  
  167.     [
  168.       AREXX_QUIT, 'QUIT', 'FORCE/S', {arxQuit},
  169.       AREXX_CDID, 'CDID', 'DOWNLOAD/S,STORE/S,FORCE/S', {arxCdid},
  170.       AREXX_TRAY, 'TRAY', 'OUT/S,IN/S', {arxDisc},
  171.       AREXX_DOWNLOAD, 'DOWNLOAD', 'ALL/S,IDFILE/K', {arxDownload},
  172.       TABLE_END
  173.     ]:arexxcommandtable)
  174.     D('[MAIN] arexx \s ALLOCAED (\s)\n', [IF (setup_arx) THEN 'IS' ELSE 'NOT', arxPortName(), NIL])
  175.  
  176.   IF (setup_cd := cdSetup(tt_device, tt_unit))=FALSE THEN Throw('Unable to setup %s, unit %ld!', [tt_device, tt_unit, NIL])
  177.   IF cdCheck()=FALSE THEN Throw('The device can not be established to be CD-ROM player!', NIL)
  178.  
  179.   setup_gui := guiSetup(prg_name,
  180.  
  181.     ->-
  182.     ->- gui programu pozostawia (niestety) wiele do ûyczenia
  183.     ->-
  184.  
  185.     [ROWS,
  186.       [COLS,
  187.         [EQROWS,
  188.           gad_writeid := [BUTTON, {guiWrite}, '_WriteID', NIL, "w", NIL, FALSE],
  189.           gad_download := [BUTTON, {guiDownload}, '_Download', NIL, "d", NIL, FALSE]
  190.         ],
  191.         [ROWS,
  192.           [TEXT, NIL, NIL, FALSE, 10],
  193.           [ICONIFY, NIL, NEW ig.create(prg_name, tt_iconfile, tt_pubname)],
  194.           [COLS,
  195.             [PLUGIN, NIL, NEW gad_progress.simplegauge(
  196.               [
  197.                 PLA_SimpleGauge_ShowText, TRUE,
  198.                 TAG_DONE
  199.               ])
  200.             ],
  201.             gad_abort := [BUTTON, {netAbort}, '_Abort', NIL, "a", NIL, TRUE]
  202.           ]
  203.         ]
  204.       ]
  205.     ],
  206.     [
  207.       EG_MENU, [ NM_TITLE, 0, 'Project',        NIL, 0, 0, NIL,
  208.                  NM_ITEM,  0, 'About...',       '?', 0, 0, {guiAbout},
  209.                  NM_ITEM,  0, 'Inquire...',     'I', 0, 0, {cdInquire},
  210.                  NM_ITEM,  0, NM_BARLABEL,      NIL, 0, 0, NIL,
  211.                  NM_ITEM,  0, 'Quit!',          'Q', 0, 0, 0,
  212.                  NM_END,   0, NIL,              NIL, 0, 0, NIL  ]:newmenu,
  213.  
  214.       ->-
  215.       ->- okienko nie zostanie otworzone
  216.       ->-
  217.  
  218.       EG_HIDE, TRUE,
  219.       TAG_DONE
  220.     ])
  221.   IF (setup_gui = FALSE) THEN Raise('Unable to setup main window!')
  222.  
  223.   ->-
  224.   ->- gîówna pëtla programu
  225.   ->- w przypadku nie zainicjalizowania portu arexx'a arxSigs() zwróci 0 (zero)
  226.   ->- wiëc wszelkie zdarzenia bëdâ ignorowane
  227.   ->-
  228.  
  229.   WHILE TRUE
  230.     sigs := Wait(SIGBREAKF_CTRL_C OR guiSigs() OR arxSigs())
  231.     IF (sigs AND guiSigs()) THEN cnt := guiHandle()
  232.     IF (sigs AND arxSigs()) THEN cnt := arxHandle()
  233.  
  234.     EXIT (sigs AND SIGBREAKF_CTRL_C)
  235.     EXIT (cnt = FALSE)
  236.   ENDWHILE
  237.  
  238. EXCEPT DO
  239.  
  240.   ->-
  241.   ->- zwolnij wszystkie zaalokowane zasoby
  242.   ->-
  243.  
  244.   IF (setup_gui) THEN guiCleanUp()
  245.   IF (setup_arx) THEN arxCleanUp()
  246.   IF (setup_cd) THEN cdCleanUp()
  247.   END ig, gad_progress
  248.   closeLibs(libs)
  249.  
  250.   IF (exception)
  251.  
  252.     ->-
  253.     ->- jeûeli byî bîâd to wyôwietl informacje
  254.     ->- zwróê do CLI kod bîëdu
  255.     ->-
  256.  
  257.     err := String(400)
  258.     IF (err)
  259.       WriteF('\s\n', stringFmt(err, exception, exceptioninfo))
  260.       DisposeLink(err)
  261.     ENDIF
  262.     rc := RETURN_FAIL
  263.   ENDIF
  264. ENDPROC rc
  265.  
  266.  
  267.  
  268.   ->-
  269.   ->- prywatne
  270.   ->- procedury obsîugiwane z poziomu GUI
  271.   ->-
  272.  
  273.  
  274.  
  275. PROC guiAbout()
  276.  
  277.   ->-
  278.   ->- informacje o programie
  279.   ->- jeûeli port arexx'a nie istnieje arxPortName() zwróci napis 'N/A'
  280.   ->-
  281.  
  282.   guiInformUser('%s\n-- %s --\n\nVersion: %s\n%s\n\nArexx Port: %s\n%s',
  283.                 ' _Ok ',
  284.                 [prg_name, prg_ware, prg_vers+11, prg_copy, arxPortName(), prg_desc, NIL])
  285. ENDPROC
  286.  
  287.  
  288. PROC guiWrite(info) IS fleWrite()
  289. PROC guiDownload(info) IS fleDownload()
  290.  
  291.  
  292.   ->-
  293.   ->- prywatne
  294.   ->- procedury obsîugujâce port Arexx'a
  295.   ->-
  296.  
  297.  
  298. PROC arxQuit(args:PTR TO arxArgs, data)
  299.  
  300.   ->-
  301.   ->- komenda arexx'a powodujâca zakoïczenie programu
  302.   ->- musi zwróciê FALSE
  303.   ->-
  304.  
  305.   VOID args
  306.   VOID data
  307. ENDPROC FALSE
  308.  
  309.  
  310.  
  311. ENUM TRAY_OUT,TRAY_IN
  312. PROC arxDisc(args:PTR TO arxArgs, data)
  313.  
  314.   ->-
  315.   ->- komenda Arexx'a umoûliwiajâca manipulowanie tackâ napëdu CD-ROM
  316.   ->- domyôlnie tacka bëdzie wysuwana
  317.   ->- zawsze zwraca TRUE
  318.   ->-
  319.  
  320.   DEF eject=TRUE
  321.   VOID data
  322.  
  323.   IF (args.argv[TRAY_IN])
  324.     eject := FALSE
  325.   ELSE
  326.  
  327.     ->-
  328.     ->- domyôlnie nastâpi wysuniëcie pîytki
  329.     ->- (args.argv[TRAY_OUT])
  330.     ->-
  331.  
  332.     eject := TRUE
  333.   ENDIF
  334.  
  335.   ->-
  336.   ->- przekaû do programu kod powrotny Arexx'a (0=FALSE, 1=TRUE)
  337.   ->-
  338.  
  339.   args.rclong := IF cdEject(eject)=0 THEN 1 ELSE 0
  340. ENDPROC TRUE
  341.  
  342.  
  343.  
  344. ENUM DOWNLOAD_ALL,DOWNLOAD_IDFILE
  345. PROC arxDownload(args:PTR TO arxArgs, data)
  346.  
  347.   ->-
  348.   ->- komenda Arexx'a umoûliwiajâca ôciâganie z internetu wszystkich identyfikatorów
  349.   ->- dla zgromadzonych w TEMP plików lub tylko jednego opisu dla pliku o konkretnej nazwie
  350.   ->-
  351.  
  352.   DEF file:PTR TO CHAR, rc=FALSE, cd
  353.   DEF handle
  354.   VOID data
  355.  
  356.   IF (file := args.argv[DOWNLOAD_IDFILE])
  357.  
  358.     ->-
  359.     ->- tworzenie struktury cdinfo z podanego pliku
  360.     ->-
  361.  
  362.     cd := cdRawInfo()
  363.     IF (handle := Open(file, MODE_OLDFILE))
  364.       IF cdReadInfo(cd, handle)
  365.  
  366.         ->-
  367.         ->- dane odczytane, pobierz informacje z internetu
  368.         ->-
  369.  
  370.         rc := fleDownload(cd, args)
  371.         cdFreeInfo(cd)
  372.       ELSE
  373.  
  374.         ->-
  375.         ->- bîâd odczytu lub niewîaôciwy plik
  376.         ->-
  377.  
  378.         args.err := 'Read error or wrong (CDID) file'
  379.       ENDIF
  380.       Close(handle)
  381.     ELSE
  382.  
  383.       ->-
  384.       ->- bîâd otwarcia pliku
  385.       ->-
  386.  
  387.       args.err := 'Can not open requested CDID file!'
  388.     ENDIF
  389.   ELSE
  390.  
  391.     ->-
  392.     ->- wszystko
  393.     ->- (args.argv[DOWNLOAD_ALL])
  394.     ->-
  395.  
  396.     rc := fleDownload(NIL, args)
  397.   ENDIF
  398.  
  399.   ->-
  400.   ->- przekaû do programu kod powrotny Arexx'a (0=FALSE, 1=TRUE)
  401.   ->-
  402.  
  403.   args.rclong := IF (rc) THEN 1 ELSE 0
  404. ENDPROC TRUE
  405.  
  406.  
  407.  
  408. ENUM CDID_DOWNLOAD,CDID_STORE,CDID_FORCE
  409. PROC arxCdid(args:PTR TO arxArgs, data)
  410.  
  411.   ->-
  412.   ->- komenda Arexx'a umoûliwiajâca pobranie opisu dla pîyty znajdujâcej sië aktualnie
  413.   ->- w napëdzie lub zachowanie informacji o pîycie w celu póúniejszego ôciâgniëcia opisu
  414.   ->- z internetu
  415.   ->- zawsze zwraca TRUE
  416.   ->-
  417.  
  418.   DEF cd, force=FALSE, rc
  419.  
  420.   VOID data
  421.   force := (args.argv[CDID_FORCE])
  422.  
  423.  
  424.   IF (args.argv[CDID_DOWNLOAD])
  425.  
  426.     ->-
  427.     ->- pobranie opisu pîyty
  428.     ->-
  429.  
  430.     IF (cd := cdCreateInfo())
  431.       rc := fleDownload(cd, args)
  432.       cdFreeInfo(cd)
  433.     ELSE
  434.  
  435.       ->-
  436.       ->- bîâd tworzenia opisu pîyty
  437.       ->-
  438.  
  439.       args.err := 'No CD in drive!'
  440.       rc := FALSE
  441.     ENDIF
  442.   ELSE
  443.  
  444.     ->-
  445.     ->- domyôlnie nastâpi sapisanie CDID do TEMP
  446.     ->-
  447.  
  448.     rc := fleWrite(force, args)
  449.   ENDIF
  450.  
  451.   ->-
  452.   ->- przekaû do programu kod powrotny Arexx'a (0=FALSE, 1=TRUE)
  453.   ->-
  454.  
  455.   args.rclong := IF (rc) THEN 1 ELSE 0
  456. ENDPROC TRUE
  457.